module.exports = {
  // 继承的规则
  extends: ['@commitlint/config-conventional'],
  // parserPreset: 'conventional-changelog-conventionalcommits',
  rules: {
    'body-leading-blank': [0],
    // 'body-max-line-length': [2, 'always', 80],
    // 'footer-leading-blank': [1, 'always'],
    // 'footer-max-line-length': [2, 'always', 100],
    // 'header-max-length': [2, 'always', 100],
    // subject 大小写不做校验
    'subject-case': [0],
    'subject-empty': [2, 'never'],
    // 'subject-full-stop': [2, 'never', '.'],
    // 'type-case': [2, 'always', 'lower-case'],
    // 'type-empty': [2, 'never'],
    'type-enum': [
      2,
      'always',
      [
        'feat', // 新功能 feature
        'fix', // 修复 bug
        'docs', // 文档注释
        'style', // 代码格式(不影响代码运行的变动)
        'refactor', // 重构(既不增加新功能，也不是修复bug)
        'perf', // 性能优化
        'test', // 增加测试
        'chore', // 构建过程或辅助工具的变动
        'revert', // 回退
        'build', // 打包
        'ci'
      ]
    ]
  }
  // prompt: {
  //   questions: {
  //     type: {
  //       description: "Select the type of change that you're committing",
  //       enum: {
  //         feat: {
  //           description: 'A new feature',
  //           title: 'Features',
  //           emoji: '✨'
  //         },
  //         fix: {
  //           description: 'A bug fix',
  //           title: 'Bug Fixes',
  //           emoji: '🐛'
  //         },
  //         docs: {
  //           description: 'Documentation only changes',
  //           title: 'Documentation',
  //           emoji: '📚'
  //         },
  //         style: {
  //           description:
  //             'Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)',
  //           title: 'Styles',
  //           emoji: '💎'
  //         },
  //         refactor: {
  //           description:
  //             'A code change that neither fixes a bug nor adds a feature',
  //           title: 'Code Refactoring',
  //           emoji: '📦'
  //         },
  //         perf: {
  //           description: 'A code change that improves performance',
  //           title: 'Performance Improvements',
  //           emoji: '🚀'
  //         },
  //         test: {
  //           description: 'Adding missing tests or correcting existing tests',
  //           title: 'Tests',
  //           emoji: '🚨'
  //         },
  //         build: {
  //           description:
  //             'Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)',
  //           title: 'Builds',
  //           emoji: '🛠'
  //         },
  //         ci: {
  //           description:
  //             'Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)',
  //           title: 'Continuous Integrations',
  //           emoji: '⚙️'
  //         },
  //         chore: {
  //           description: "Other changes that don't modify src or test files",
  //           title: 'Chores',
  //           emoji: '♻️'
  //         },
  //         revert: {
  //           description: 'Reverts a previous commit',
  //           title: 'Reverts',
  //           emoji: '🗑'
  //         }
  //       }
  //     },
  //     scope: {
  //       description:
  //         'What is the scope of this change (e.g. component or file name)'
  //     },
  //     subject: {
  //       description: 'Write a short, imperative tense description of the change'
  //     },
  //     body: {
  //       description: 'Provide a longer description of the change'
  //     },
  //     isBreaking: {
  //       description: 'Are there any breaking changes?'
  //     },
  //     breakingBody: {
  //       description:
  //         'A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself'
  //     },
  //     breaking: {
  //       description: 'Describe the breaking changes'
  //     },
  //     isIssueAffected: {
  //       description: 'Does this change affect any open issues?'
  //     },
  //     issuesBody: {
  //       description:
  //         'If issues are closed, the commit requires a body. Please enter a longer description of the commit itself'
  //     },
  //     issues: {
  //       description: 'Add issue references (e.g. "fix #123", "re #123".)'
  //     }
  //   }
  // }
}

// ! 解释与说明
/*
parserPreset: 用于指定解析器的预设名称，这里设置为conventional-changelog-conventionalcommits。
rules: 包含了一系列规则，用于定义提交消息的格式和约束。具体规则包括：
      body-leading-blank: [1, 'always']
      含义：提交消息的主体部分前需要一个空行。
      配置方式：第一个参数1表示规则的严重程度，always表示始终需要遵循这个规则。

      body-max-line-length: [2, 'always', 100]
      含义：提交消息的主体部分每行的最大长度为100字符。
      配置方式：第一个参数2表示规则的严重程度，always表示始终需要遵循这个规则，100表示具体的字符数限制。

      footer-leading-blank: [1, 'always']
      含义：提交消息的尾部部分前需要一个空行。
      配置方式：同样是指定了规则的严重程度和遵循规则的方式。

      footer-max-line-length: [2, 'always', 100]
      含义：提交消息的尾部部分每行的最大长度为100字符。
      配置方式：类似地指定了规则的严重程度、遵循规则的方式和具体的字符数限制。

      header-max-length: [2, 'always', 100]
      含义：提交消息的标题部分的最大长度为100字符。
      配置方式：同样是指定了规则的严重程度、遵循规则的方式和具体的字符数限制。

      subject-case: [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']]
      含义：提交消息的标题部分不允许使用特定的大小写格式，包括句子格式、首字母大写格式、帕斯卡命名格式和大写格式。
      配置方式：第一个参数2表示规则的严重程度，never表示不允许使用指定的格式，最后一个数组表示不允许使用的格式列表。

      subject-empty: [2, 'never']
      含义：提交消息的标题部分不允许为空。
      配置方式：同样是指定了规则的严重程度和遵循规则的方式。

      subject-full-stop: [2, 'never', '.']
      含义：提交消息的标题部分不允许以句号结尾。
      配置方式：同样是指定了规则的严重程度、遵循规则的方式和不允许出现的标点符号。

      type-case: [2, 'always', 'lower-case']
      含义：提交消息的类型部分必须使用小写字母。
      配置方式：同样是指定了规则的严重程度、遵循规则的方式和允许的格式。

      type-empty: [2, 'never']
      含义：提交消息的类型部分不允许为空。
      配置方式：同样是指定了规则的严重程度和遵循规则的方式。

      type-enum: [2, 'always', ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test']]
      含义：提交消息的类型部分必须是预定义的一组值，包括build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test。
      配置方式：同样是指定了规则的严重程度、遵循规则的方式和允许的取值范围


prompt: 包含了一系列问题，用于向开发者询问提交信息的各个部分。具体问题包括：

  type: 提问提交的变更类型。
  scope: 提问变更的作用域。
  subject: 提问变更的简短描述。
  body: 提问变更的详细描述。
  isBreaking: 提问是否有破坏性变更。
  breakingBody: 提问破坏性变更的详细描述。
  breaking: 提问破坏性变更的具体内容。
  isIssueAffected: 提问该变更是否影响了某些问题。
  issuesBody: 提问影响的问题的详细描述。
  issues: 提问添加的问题引用。

*/
